import Vue from "vue";
import Vuex from "vuex";

// 发送请求 引入接口文件
import { getMenuList } from "@/api";
// 调用recursionRoutes 计算出用户路由配置
import recursionRoutes from "@/utils/recursionRoutes";
import allRoutes from "@/router/allRoutes";

import dynamicRoutes from "@/router/dynamicRoutes";

import router from "@/router";
Vue.use(Vuex);

let userInfo = JSON.parse(localStorage.getItem("qq-userInfo")) || {};
let permission = JSON.parse(localStorage.getItem("qq-permission")) || {};
// 侧边栏思路
// 1 发送请求 获取用户菜单名
// 2 通过递归函数 计算出当前用户的路由配置
// 3 将计算好得到路由配置 添加到'/'路由的children中
export default new Vuex.Store({
  state: {
    sideMenu: [],
    breadCrumb: [],
    userInfo,
    permission,
  },
  mutations: {
    SET_SIDEMENU(state, payload) {
      state.sideMenu = payload;
      // console.log(state.sideMenu);
      // 判断的出来的路由 最后要添加到dynamicRoutes里面(里面的页面都是需要鉴权的) 成为home的子路由
      // 查找到dynamicRoutes中路径为'/'的路由 添加的一个children属性 值就是我们比较好的sideMenu
      let target = dynamicRoutes.find((item) => {
        return item.path === "/";
      });
      // console.log('---tar',target);
      // console.log('---pay',payload);
      target.children = state.sideMenu;

      // 核心: 通过addRoutes 这个方法 动态的将路由配置添加到项目中
      // addRoutes动态添加更多的路由规则 参数必须是一个符合 routes 选项要求的配置
      router.addRoutes(dynamicRoutes);
    },
    // 清空用户菜单
    CLEAR_SIDEMENU(state) {
      state.sideMenu = [];
    },
    // 存储用户名显示
    SET_USERINFO(state, payload) {
      state.userInfo = payload;
    },
    SET_PERMISSION(state, payload) {
      state.permission = payload;
    },
    // 更改面包屑
    SET_BREADCRUMB(state, payload) {
      state.breadCrumb = payload;
    },
  },
  actions: {
    async FETCH_MENULIST({ commit }) {
      // 发送请求 获取用户菜单名字
      let res = await getMenuList();
      // 调用recursionRoutes 计算出用户路由配置
      // console.log(res);
      // 判断 接口返回的数据
      if (res.data.state && res.data.menuList.length > 0) {
        // 递归判断远程获取的路由 和 我们自己配置的路由 通过commit提交给mutaitons
        let userMenu = recursionRoutes(res.data.menuList, allRoutes);
        commit("SET_SIDEMENU", userMenu);
      }
      //在提交给mutations
    },
  },
  modules: {},
});
